Passing data between screens

_layout.tsx

Defines the navigation stack (Required) in expo-router. We can provide different screen options here

import { Stack } from "expo-router";
export default function RootLayout() {
    return (
    <Stack>
        <Stack.Screen name="index" options={{ headerShown: false, title: 'Home' }} />
        <Stack.Screen name="ProfileScreen" options={{ title: 'ProfileScreen' }} />
    </Stack>
    );
}
        

index.tsx


import { View, Text, Button } from 'react-native';
import { useRouter } from 'expo-router';

export default function HomeScreen() {
    const router = useRouter();

    return (
    <View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>
        <Text>Welcome to Home Screen</Text>

        <Button 
        title="Go to Profile (Router)" 
        onPress={() => router.push({ pathname: "/ProfileScreen", params: { name: "John Doe" } })}
        />
    </View>
    );
}
        

ProfileScreen.tsx


import { View, Text, Button } from 'react-native';
import { useLocalSearchParams, useRouter } from 'expo-router';

export default function ProfileScreen() {
    const router = useRouter();
    const { name } = useLocalSearchParams();
    return (
    <View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>
        <Text>This is the Profile Screen {name}</Text>
        
        {/* Go back to Home Screen */}
        <Button title="Go Back" onPress={() => router.back()} />
        </View>
    );
}